package com.gitee.zycra.union.api.manager;

import com.gitee.zycra.union.api.common.model.ApiMockTemplateInterface;
import com.gitee.zycra.union.api.common.util.IdGenerator;
import com.gitee.zycra.union.api.common.vo.MockInterfaceCaseVO;
import com.gitee.zycra.union.api.common.vo.MockInterfaceVO;
import com.gitee.zycra.union.api.common.vo.MockTemplateInterfaceVO;
import com.gitee.zycra.union.api.dao.ApiInterfaceCaseDao;
import com.gitee.zycra.union.api.dao.ApiMockTemplateInterfaceDao;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.ArrayList;
import java.util.List;

/**
 * @author zycra
 */
@Component
public class ApiMockTemplateInterfaceManager {

    @Autowired
    private ApiMockTemplateInterfaceDao apiMockTemplateInterfaceDao;

    @Autowired
    private ApiInterfaceCaseDao apiInterfaceCaseDao;

    @Autowired
    private IdGenerator idGenerator;

    /**
     * 添加mock模板接口
     *
     * @param templateId  模板ID
     * @param interfaceId 接口ID
     * @return 影响行数
     */
    public int addMockTemplateInterface(Long templateId, Long interfaceId) {
        return apiMockTemplateInterfaceDao.insert(new ApiMockTemplateInterface().setId(idGenerator.nextId())
                .setTemplateId(templateId)
                .setInterfaceId(interfaceId));
    }

    /**
     * 删除nock模板接口
     *
     * @param id 模板ID
     * @return 影响行数
     */
    public int deleteMockTemplateInterface(Long id) {
        return apiMockTemplateInterfaceDao.updateToDelete(id);
    }

    /**
     * 根据模板ID查询模板接口
     *
     * @param templateId 模板ID
     * @return 查询结果
     */
    public List<MockTemplateInterfaceVO> selectByTemplateId(Long templateId) {
        return apiMockTemplateInterfaceDao.selectByTemplateId(templateId);
    }

    /**
     * 查询接口和期望信息
     *
     * @param templateId 模板ID
     * @return 查询结果
     */
    public List<MockInterfaceVO> selectByTemplateIdForAdd(Long templateId) {
        List<MockTemplateInterfaceVO> list = selectByTemplateId(templateId);
        if (list == null || list.isEmpty()) {
            return new ArrayList<>();
        }
        List<MockInterfaceVO> result = new ArrayList<>();
        for (MockTemplateInterfaceVO mockTemplateInterfaceVO : list) {
            List<MockInterfaceCaseVO> mockInterfaceCaseVOList =
                    apiInterfaceCaseDao.selectByInterfaceIdForAddInstance(mockTemplateInterfaceVO.getInterfaceId());
            result.add(MockInterfaceVO.buildMockInterfaceVO(mockTemplateInterfaceVO, mockInterfaceCaseVOList));
        }
        return result;
    }
}
